﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Data;


/*
 * uma tabela tblMens serve para colocar as mensagens surgindo so processo de montar
 * 
 */

namespace Montador
{
    public enum CatMens
    {
        // categorias de mensagens
        Protocolo,      // informação sobre montar, não necessariamente relacionado ao problema
        Debug,          // somente informação adicional para depurar
        Alerta,         // informação sobre uma situação possivelmente sendo um erro no programa fonte
        Erro            // erro no programa fonte
    }

    public class tblMensagens : DataTable
    {
        public tblMensagens()
        {
            base.Columns.Add("Categoria", typeof(CatMens));
            base.Columns.Add("Linha", typeof(int));  // valor > 0 é número da linha. Valor < 0 significa que não há número da linha
            base.Columns.Add("Mensagem", typeof(string));
        }

        // métodos para adicionar mensagens de cada categoria
        //
        public void D(uint? prmLinha, string prmTexto)
        {
            DataRow rr = base.NewRow();
            rr["Categoria"] = CatMens.Debug;
            rr["Linha"] = (prmLinha == null) ? -1 : (int)prmLinha;
            rr["Mensagem"] = prmTexto;
            base.Rows.Add(rr);
        }
        public void I(uint? prmLinha, string prmTexto)
        {
            DataRow rr = base.NewRow();
            rr["Categoria"] = CatMens.Protocolo;
            rr["Linha"] = (prmLinha == null) ? -1 : (int)prmLinha;
            rr["Mensagem"] = prmTexto;
            base.Rows.Add(rr);
        }
        public void A(uint? prmLinha, string prmTexto)
        {
            DataRow rr = base.NewRow();
            rr["Categoria"] = CatMens.Alerta;
            rr["Linha"] = (prmLinha == null)? -1: (int)prmLinha;
            rr["Mensagem"] = prmTexto;
            base.Rows.Add(rr);
        }
        public void E(uint? prmLinha, string prmTexto)
        {
            DataRow rr = base.NewRow();
            rr["Categoria"] = CatMens.Erro;
            rr["Linha"] = (prmLinha == null) ? -1 : (int)prmLinha;
            rr["Mensagem"] = prmTexto;
            base.Rows.Add(rr);
        }

        // Metodos para filtrar o conteúdo
        //
        public uint NumErrs()
        {
            return (uint) System.Data.DataTableExtensions.AsEnumerable(this).Count(x => x.Field<CatMens>("Categoria") == CatMens.Erro);
        }

    }
}
